package org.nf.db.util.converter;

import org.nf.db.util.TypeConverter;

import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.LocalTime;
/**
 * @author wangl
 * @date 2023/4/7
 */
public class LocalTimeConverter implements TypeConverter {
    /**
     * 判断是否适配LocalTime.class
     * @param fieldType 时间的class对象
     * @return true or false
     */
    @Override
    public boolean supports(Class<?> fieldType) {
        return fieldType.equals(LocalTime.class);
    }

    /**
     * 转换为localTime
     * @param fieldType 时间的class对象
     * @param value 时间类型
     * @return 返回 localTime 对象 or null
     *
     * 如果value是LocalTime类型，则直接返回它本身。
     * 如果value是LocalDateTime类型，则通过调用toLocalTime()方法提取其中的时间部分。
     * 如果value是Time类型（通常是java.sql.Time），则调用其toLocalTime()方法转换为LocalTime。
     * 如果value是Timestamp类型（通常是java.sql.Timestamp），则首先将其转换为LocalDateTime，然后再提取时间部分。
     * 如果value不是上述任何类型，则返回null。
     */
    @Override
    public Object apply(Class<?> fieldType, Object value) {
        return switch (value) {
            case LocalTime localTime -> localTime;
            case LocalDateTime localDateTime -> localDateTime.toLocalTime();
            case Time time -> time.toLocalTime();
            case Timestamp timestamp -> timestamp.toLocalDateTime().toLocalTime();
            default -> null;
        };
    }
}
